package br.uece.comp.test;

import java.util.Random;

import br.uece.comp.heap.binario.HeapBinario;
import br.uece.comp.heap.fibonacci.FibonacciHeap;

public class FibonacciHeapTesteComparacao {

	private FibonacciHeap<Integer> fib = new FibonacciHeap<Integer>(
			br.uece.comp.heap.Heap.Priority.MAX);

	private HeapBinario<Integer> binario;

	public static final int TAM_AMOSTRA = 1000000;

	public static void main(String[] args) {
		new FibonacciHeapTesteComparacao();
	}

	public FibonacciHeapTesteComparacao() {
		Integer[] amostra = gerarAmostra();
		binario = new HeapBinario<Integer>(amostra);
		for (int i = 0; i < TAM_AMOSTRA; i++) {
			fib.inserir(amostra[i]);
		}

		int x, y;
		for (int j = 0; j < TAM_AMOSTRA; j++) {
			x = binario.extrairMin();
			y = fib.extrairMaxPriori();

			if (x != y) {
				System.out.println("DEU MERDA!");
				System.out.println("x: " + x + " | y: " + y + " | i: " + j);
			}
			if (j % 10000 == 0) {
				System.out.println("Avaliado " + (j + 1) + " entradas");
			}
		}
		System.out.println("Teste terminado!");
	}

	public Integer[] gerarAmostra() {
		Integer[] amostra = new Integer[TAM_AMOSTRA];

		Random radom = new Random(TAM_AMOSTRA * 10);
		for (int i = 0; i < TAM_AMOSTRA; i++) {
			amostra[i] = new Integer(radom.nextInt());
		}
		System.out.println("Amostra gerada!");
		return amostra;
	}
}
